<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 关于 next方法的传参与 yield的返回值
        function* gen(){
            let a = yield 1;
            // 默认情况下yield的返回值 会是undefined
            console.log(a);
            let b = yield 2
            console.log(b);
            return "结束";
        }
        
        let it = gen();

        // 如果我们给next方法传参的话，这个参数 将作为上一条yield语句的返回值
        // 第一条执行的next方法的参数 会直接被丢弃
        console.log(it.next("参数0"));//{value: 1, done: false}  //参数0会被丢弃
        console.log(it.next("参数1"));//{value: 2, done: false}
        console.log(it.next("参数2"));

        //   next传参意味着 生成器函数执行的过程中  依然可以把外部参数 传到生成器函数的内部
        //   next传参来控制生成器内部代码执行

        // var fn = function(){
        // }
        // var a = fn();



        function* gen1(){
            let index = 0;
            let reset = false;//reset重置

            // 这里的true就相当于index=true
            for(index = 0;true;index++){
                reset = yield index;//在全局提升
                
                if(reset){
                    index = -1;
                }
            }
        }


        let it1 = gen1();
        console.log(it1.next());
        console.log(it1.next());
        console.log(it1.next());
        console.log(it1.next(true));


    </script>
</body>
</html>